home *** CD-ROM | disk | FTP | other *** search
- package com.ibm.xml.internal;
-
- import com.ibm.xml.framework.AttDef;
- import com.ibm.xml.framework.Attr;
- import com.ibm.xml.framework.AttrPool;
- import com.ibm.xml.framework.ParserState;
- import com.ibm.xml.framework.StringPool;
- import com.ibm.xml.framework.XMLErrorHandler;
- import org.xml.sax.AttributeList;
-
- public final class DefaultAttrPool implements AttrPool, AttributeList {
- static final int CHUNK_SHIFT = 5;
- static final int CHUNK_SIZE = 32;
- static final int CHUNK_MASK = 31;
- static final int INITIAL_CHUNK_COUNT = 32;
- static final int ATTRFLAG_SPECIFIED = 64;
- static final int ATTRFLAG_LASTATTR = 128;
- private StringPool fStringPool;
- private XMLErrorHandler fErrorHandler;
- private int fAttlistIndex = -1;
- private int fAttlistLength;
- private int fAttrCount;
- private int[][] fAttName = new int[32][];
- private int[][] fAttValue = new int[32][];
- private byte[][] fAttTypeAndFlags = new byte[32][];
-
- public DefaultAttrPool(ParserState var1) {
- this.fStringPool = var1.cacheStringPool();
- this.fErrorHandler = var1.getErrorHandler();
- }
-
- public void reset(ParserState var1) {
- this.fStringPool = var1.cacheStringPool();
- this.fErrorHandler = var1.getErrorHandler();
- this.fAttlistIndex = -1;
- this.fAttlistLength = 0;
- this.fAttrCount = 0;
- }
-
- public AttrPool resetOrCopy(ParserState var1) {
- return new DefaultAttrPool(var1);
- }
-
- private boolean ensureCapacity(int var1, int var2) {
- try {
- if (this.fAttName[var1][var2] == 0) {
- return false;
- }
-
- return true;
- } catch (ArrayIndexOutOfBoundsException var5) {
- int[][] var3 = new int[var1 * 2][];
- System.arraycopy(this.fAttName, 0, var3, 0, var1);
- this.fAttName = var3;
- var3 = new int[var1 * 2][];
- System.arraycopy(this.fAttValue, 0, var3, 0, var1);
- this.fAttValue = var3;
- byte[][] var4 = new byte[var1 * 2][];
- System.arraycopy(this.fAttTypeAndFlags, 0, var4, 0, var1);
- this.fAttTypeAndFlags = var4;
- } catch (NullPointerException var6) {
- }
-
- this.fAttName[var1] = new int[32];
- this.fAttValue[var1] = new int[32];
- this.fAttTypeAndFlags[var1] = new byte[32];
- return true;
- }
-
- public int addAttr(Attr var1, int var2) throws Exception {
- int var3;
- int var4;
- if (var2 != -1) {
- var3 = var2 >> 5;
- var4 = var2 & 31;
-
- while(var2 < this.fAttrCount) {
- if (this.fAttName[var3][var4] == var1.attName) {
- this.fErrorHandler.error1(9, var1.attName);
- return -1;
- }
-
- ++var2;
- ++var4;
- if (var4 == 32) {
- ++var3;
- var4 = 0;
- }
- }
- } else {
- var3 = this.fAttrCount >> 5;
- var4 = this.fAttrCount & 31;
- }
-
- this.ensureCapacity(var3, var4);
- this.fAttName[var3][var4] = var1.attName;
- this.fAttValue[var3][var4] = var1.attValue;
- this.fAttTypeAndFlags[var3][var4] = (byte)((var1.specified ? 64 : 0) | var1.attType);
- int var5 = this.fAttrCount++;
- return var5;
- }
-
- public void setIsLastAttr(int var1) {
- if (var1 >= 0 && var1 < this.fAttrCount) {
- int var2 = var1 >> 5;
- int var3 = var1 & 31;
- byte[] var10000 = this.fAttTypeAndFlags[var2];
- var10000[var3] = (byte)(var10000[var3] | 128);
- }
- }
-
- public int getAttrName(int var1) {
- if (var1 >= 0 && var1 < this.fAttrCount) {
- int var2 = var1 >> 5;
- int var3 = var1 & 31;
- return this.fAttName[var2][var3];
- } else {
- return -1;
- }
- }
-
- public int getAttType(int var1) {
- if (var1 >= 0 && var1 < this.fAttrCount) {
- int var2 = var1 >> 5;
- int var3 = var1 & 31;
- return this.fAttTypeAndFlags[var2][var3] & 63;
- } else {
- return -1;
- }
- }
-
- public int getAttValue(int var1) {
- if (var1 >= 0 && var1 < this.fAttrCount) {
- int var2 = var1 >> 5;
- int var3 = var1 & 31;
- return this.fAttValue[var2][var3];
- } else {
- return -1;
- }
- }
-
- public boolean isSpecified(int var1) {
- if (var1 >= 0 && var1 < this.fAttrCount) {
- int var2 = var1 >> 5;
- int var3 = var1 & 31;
- return (this.fAttTypeAndFlags[var2][var3] & 64) != 0;
- } else {
- return true;
- }
- }
-
- public boolean isLastAttr(int var1) {
- if (var1 >= 0 && var1 < this.fAttrCount) {
- int var2 = var1 >> 5;
- int var3 = var1 & 31;
- return (this.fAttTypeAndFlags[var2][var3] & 128) != 0;
- } else {
- return true;
- }
- }
-
- public void releaseAttrList(int var1) {
- if (var1 != -1) {
- int var2 = var1 >> 5;
- int var3 = var1 & 31;
-
- boolean var4;
- do {
- var4 = (this.fAttTypeAndFlags[var2][var3] & 128) != 0;
- this.fAttName[var2][var3] = -1;
- if ((this.fAttTypeAndFlags[var2][var3] & 64) != 0) {
- this.fStringPool.releaseString(this.fAttValue[var2][var3]);
- }
-
- this.fAttValue[var2][var3] = -1;
- ++var3;
- if (var3 == 32) {
- ++var2;
- var3 = 0;
- }
- } while(!var4);
-
- if (this.fAttrCount == (var2 << 5) + var3) {
- this.fAttrCount = var1;
- } else {
- try {
- this.fErrorHandler.error(169);
- } catch (Exception var5) {
- }
- }
- }
- }
-
- public AttributeList getAttributeList(int var1) {
- this.fAttlistIndex = var1;
- if (this.fAttlistIndex == -1) {
- this.fAttlistLength = 0;
- } else {
- int var2 = this.fAttlistIndex >> 5;
- int var3 = this.fAttlistIndex & 31;
-
- for(this.fAttlistLength = 1; (this.fAttTypeAndFlags[var2][var3] & 128) == 0; ++this.fAttlistLength) {
- ++var3;
- if (var3 == 32) {
- ++var2;
- var3 = 0;
- }
- }
- }
-
- return this;
- }
-
- public int getLength() {
- return this.fAttlistLength;
- }
-
- public String getName(int var1) {
- if (var1 >= 0 && var1 < this.fAttlistLength) {
- int var2 = this.fAttlistIndex + var1 >> 5;
- int var3 = this.fAttlistIndex + var1 & 31;
- return this.fStringPool.toString(this.fAttName[var2][var3]);
- } else {
- return null;
- }
- }
-
- public String getType(int var1) {
- if (var1 >= 0 && var1 < this.fAttlistLength) {
- int var2 = this.fAttlistIndex + var1 >> 5;
- int var3 = this.fAttlistIndex + var1 & 31;
- int var4 = this.fAttTypeAndFlags[var2][var3] & 63;
- if (var4 == 9) {
- var4 = 6;
- }
-
- return AttDef.getAttTypeString(var4);
- } else {
- return null;
- }
- }
-
- public String getValue(int var1) {
- if (var1 >= 0 && var1 < this.fAttlistLength) {
- int var2 = this.fAttlistIndex + var1 >> 5;
- int var3 = this.fAttlistIndex + var1 & 31;
- return this.fStringPool.toString(this.fAttValue[var2][var3]);
- } else {
- return null;
- }
- }
-
- public String getType(String var1) {
- int var2 = this.fStringPool.addSymbol(var1.intern());
- if (var2 == -1) {
- return null;
- } else {
- int var3 = this.fAttlistIndex >> 5;
- int var4 = this.fAttlistIndex & 31;
-
- for(int var5 = 0; var5 < this.fAttlistLength; ++var5) {
- if (this.fAttName[var3][var4] == var2) {
- int var6 = this.fAttTypeAndFlags[var3][var4] & 63;
- if (var6 == 9) {
- var6 = 6;
- }
-
- return AttDef.getAttTypeString(var6);
- }
-
- ++var4;
- if (var4 == 32) {
- ++var3;
- var4 = 0;
- }
- }
-
- return null;
- }
- }
-
- public String getValue(String var1) {
- int var2 = this.fStringPool.addSymbol(var1.intern());
- if (var2 == -1) {
- return null;
- } else {
- int var3 = this.fAttlistIndex >> 5;
- int var4 = this.fAttlistIndex & 31;
-
- for(int var5 = 0; var5 < this.fAttlistLength; ++var5) {
- if (this.fAttName[var3][var4] == var2) {
- return this.fStringPool.toString(this.fAttValue[var3][var4]);
- }
-
- ++var4;
- if (var4 == 32) {
- ++var3;
- var4 = 0;
- }
- }
-
- return null;
- }
- }
-
- public int getFirstAttr(int var1) {
- return var1 >= 0 && var1 < this.fAttrCount ? var1 : -1;
- }
-
- public int getNextAttr(int var1) {
- return this.isLastAttr(var1) ? -1 : var1 + 1;
- }
- }
-